package com.ai.dmc.index.dao.jotm.dao;

import java.util.List;
import java.util.Map;

/**
 * Title： Description： 多数据源Dao接口类 Copyright：Copyright (c) 2009 Company：亚信科技（中国）有限公司
 * 
 * @author zlb, 2016年1月9日
 * @version 1.0
 */
public interface IBaseMDao {
	/**
	 * 根据Id获取对象
	 * 
	 * @param id
	 *            主键
	 * @param sqlIds
	 *            脚本编号
	 * @return Object对象
	 */
	public Object[] queryForObject(int id, String... sqlIds);

	/**
	 * 根据Id获取对象
	 * 
	 * @param id
	 *            主键
	 * @param cls
	 *            返回的对象Class
	 * @param sqlIds
	 *            脚本编号
	 * @return cls对应的类
	 */
	public <T> T[] queryForObject(int id, Class<T> cls, String... sqlIds);

	/**
	 * 根据条件获取对象
	 * 
	 * @param params
	 *            参数
	 * @param sqlIds
	 *            脚本编号
	 * @return Object对象
	 */
	public Object[] queryForObject(Map<String, String> params, String... sqlIds);

	/**
	 * 根据条件获取对象
	 * 
	 * @param params
	 *            参数
	 * @param cls
	 *            返回的对象Class
	 * @param sqlIds
	 *            脚本编号
	 * @return cls对应的类
	 */
	public <T> T[] queryForObject(Map<String, String> params, Class<T> cls, String... sqlIds);

	/**
	 * 获取数据总条数
	 * 
	 * @param params
	 *            参数
	 * @param sqlIds
	 *            脚本编号
	 * @return 条数
	 */
	public int[] getTotalCount(Map<String, String> params, String... sqlIds);

	/**
	 * 查询列表
	 * 
	 * @param params
	 *            参数
	 * @param cls
	 *            返回的对象Class
	 * @param sqlIds
	 *            脚本编号
	 * @return 列表<cls对应的类>
	 */
	public <T> List<T>[] queryForList(Map<String, String> params, Class<T> cls, String... sqlIds);

	/**
	 * 查询列表
	 * 
	 * @param params
	 *            参数
	 * @param sqlIds
	 *            脚本编号
	 * @return 列表
	 */
	public List<Map<String, String>>[] queryForList(Map<String, String> params, String... sqlIds);

	/**
	 * 修改数据
	 * 
	 * @param object
	 *            待更新对象
	 * @param sqlIds
	 *            脚本编号
	 * @return 条数
	 */
	public int[] update(Object object, String... sqlIds);

	/**
	 * 插入数据
	 * 
	 * @param object
	 *            待插入的对象
	 * @param sqlIds
	 *            脚本编号
	 * @return 条数
	 */
	public int[] insert(Object object, String... sqlIds);

	/**
	 * 删除数据
	 * 
	 * @param id
	 *            主键
	 * @param sqlIds
	 * @return 条数
	 */
	public int[] delete(int id, String... sqlIds);

	/**
	 * 删除数据
	 * 
	 * @param params
	 *            参数
	 * @param sqlIds
	 *            脚本编号
	 * @return 条数
	 */
	public int[] delete(Map<String, String> params, String... sqlIds);

	/**
	 * 查询对象
	 * 
	 * @param sqlId
	 *            主键ID 参数
	 */
	public Object queryForObject(String sqlId, int id);

	public <T> T queryForObject(String sqlId, int id, Class<T> cls);

	public Object queryForObject(String sqlId, Map<String, String> params);

	public <T> T queryForObject(String sqlId, Map<String, String> params, Class<T> cls);

	public int getTotalCount(String sqlId, Map<String, String> params);

	public <T> List<T> queryForList(String sqlId, Map<String, String> params, Class<T> cls);

	public List<Map<String, String>> queryForList(String sqlId, Map<String, String> params);

	public List<Map<String, String>> queryForPageList(String sqlId,Map<String, String> param);
		
	public int update(String sqlId, Object object);

	public int insert(String sqlId, Object object);

	public int delete(String sqlId, int id);

    public int delete(String sqlId, Map<String, String> params);

    public List<Map<String, Object>> queryForListByObjectMap(String sqlId, Map<String, Object> param);

    public List<Map<String, String>> queryForListByObjectMap2(String sqlId, Map<String, Object> param);

    public List<Map<String, String>> queryForPageListByObjectMap2(String sqlId, Map<String, Object> param);

    public List<Map<String, Object>> queryForPageListByObjectMap(String sqlId, Map<String, Object> param);

    public int getTotalCountByObjectMap(String sqlId, Map<String, Object> params);

    public Object queryForObjectByObjectMap(String sqlId, Map<String, Object> params);

    /**
     * 先删数据，后插入
     * 
     * @param params
     * @param delSqlId
     * @param insertSqlId
     * @return
     */
    public int[] executeDeleteInsert(String delSqlId, String insertSqlId, Map<String, String> params);
    /**
     * 先删数据，后插入(参数格式不一样)
     * @param params
     * @param delSqlId
     * @param insertSqlId
     * @return
     */
    public int[] executeDeleteInsertDiffParam(String delSqlId, String insertSqlId, Map<String, String> delParam,List<Map<String,String>> insertParam );

}
